From 11631e2ed03951c9c3359e772987e8be0804b2fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timo=20R=C3=B6hling?= Date: Thu, 3 Nov 2022 00:08:59 +0100 Subject: [PATCH] Switch from GLEW to libepoxy --- debian/control | 3 +- ...h => 0011-Replace-BlueGL-with-epoxy.patch} | 111 +++++++++--------- debian/patches/series | 2 +- 3 files changed, 56 insertions(+), 60 deletions(-) rename debian/patches/{0011-Replace-BlueGL-with-GLEW.patch => 0011-Replace-BlueGL-with-epoxy.patch} (83%) diff --git a/debian/control b/debian/control index 15d097f..9b7917a 100644 --- a/debian/control +++ b/debian/control @@ -10,8 +10,7 @@ Build-Depends: debhelper-compat (= 13), libastcenc-dev, libbenchmark-dev, libdraco-dev, - libgl-dev, - libglew-dev, + libepoxy-dev, libgtest-dev, libimgui-dev, libjsmn-dev, diff --git a/debian/patches/0011-Replace-BlueGL-with-GLEW.patch b/debian/patches/0011-Replace-BlueGL-with-epoxy.patch similarity index 83% rename from debian/patches/0011-Replace-BlueGL-with-GLEW.patch rename to debian/patches/0011-Replace-BlueGL-with-epoxy.patch index c26d26b..35d142b 100644 --- a/debian/patches/0011-Replace-BlueGL-with-GLEW.patch +++ b/debian/patches/0011-Replace-BlueGL-with-epoxy.patch @@ -1,15 +1,16 @@ From: =?utf-8?q?Timo_R=C3=B6hling?= Date: Wed, 26 Jan 2022 17:40:16 +0100 -Subject: Replace BlueGL with GLEW +Subject: Replace BlueGL with epoxy --- - CMakeLists.txt | 1 - - filament/backend/CMakeLists.txt | 10 +- - filament/backend/src/opengl/OpenGLDriver.cpp | 4 +- - filament/backend/src/opengl/PlatformGLX.cpp | 167 ++++++--------------------- - filament/backend/src/opengl/PlatformGLX.h | 6 +- - filament/backend/src/opengl/gl_headers.h | 3 +- - 6 files changed, 49 insertions(+), 142 deletions(-) + CMakeLists.txt | 1 - + filament/backend/CMakeLists.txt | 8 +- + filament/backend/src/opengl/OpenGLContext.cpp | 4 +- + filament/backend/src/opengl/OpenGLDriver.cpp | 4 +- + filament/backend/src/opengl/PlatformGLX.cpp | 151 +++----------------------- + filament/backend/src/opengl/PlatformGLX.h | 4 +- + filament/backend/src/opengl/gl_headers.h | 2 +- + 7 files changed, 28 insertions(+), 146 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a95c557..5c117c3 100644 @@ -24,7 +25,7 @@ index a95c557..5c117c3 100644 add_subdirectory(${LIBRARIES}/imageio) diff --git a/filament/backend/CMakeLists.txt b/filament/backend/CMakeLists.txt -index f61faee..7a1ba64 100644 +index f61faee..360471f 100644 --- a/filament/backend/CMakeLists.txt +++ b/filament/backend/CMakeLists.txt @@ -285,11 +285,6 @@ endif() @@ -39,20 +40,40 @@ index f61faee..7a1ba64 100644 if (FILAMENT_SUPPORTS_VULKAN) target_link_libraries(${TARGET} PRIVATE bluevk vkmemalloc vkshaders smol-v) endif() -@@ -299,8 +294,13 @@ if (FILAMENT_SUPPORTS_METAL) +@@ -299,8 +294,11 @@ if (FILAMENT_SUPPORTS_METAL) endif() if (LINUX) + find_package(X11 REQUIRED) -+ find_package(GLEW REQUIRED) -+ find_package(OpenGL REQUIRED) target_link_libraries(${TARGET} PUBLIC Threads::Threads) target_link_libraries(${TARGET} PRIVATE dl) + target_link_libraries(${TARGET} PRIVATE ${X11_X11_LIB}) -+ target_link_libraries(${TARGET} PRIVATE GLEW::GLEW OpenGL::GL) ++ target_link_libraries(${TARGET} PRIVATE epoxy) endif() # ================================================================================================== +diff --git a/filament/backend/src/opengl/OpenGLContext.cpp b/filament/backend/src/opengl/OpenGLContext.cpp +index 62aa98f..01a4e24 100644 +--- a/filament/backend/src/opengl/OpenGLContext.cpp ++++ b/filament/backend/src/opengl/OpenGLContext.cpp +@@ -57,7 +57,7 @@ OpenGLContext::OpenGLContext() noexcept { + } + } + ShaderModel shaderModel = ShaderModel::UNKNOWN; +- if (GLES30_HEADERS) { ++ if (!epoxy_is_desktop_gl()) { + if (major == 3 && minor >= 0) { + shaderModel = ShaderModel::GL_ES_30; + } +@@ -65,7 +65,7 @@ OpenGLContext::OpenGLContext() noexcept { + features.multisample_texture = true; + } + initExtensionsGLES(major, minor, exts); +- } else if (GL41_HEADERS) { ++ } else { + if (major == 4 && minor >= 1) { + shaderModel = ShaderModel::GL_CORE_41; + } diff --git a/filament/backend/src/opengl/OpenGLDriver.cpp b/filament/backend/src/opengl/OpenGLDriver.cpp index 9b7135f..5ccf074 100644 --- a/filament/backend/src/opengl/OpenGLDriver.cpp @@ -76,17 +97,17 @@ index 9b7135f..5ccf074 100644 #endif { diff --git a/filament/backend/src/opengl/PlatformGLX.cpp b/filament/backend/src/opengl/PlatformGLX.cpp -index b5cb484..4253f7c 100644 +index b5cb484..32c16d8 100644 --- a/filament/backend/src/opengl/PlatformGLX.cpp +++ b/filament/backend/src/opengl/PlatformGLX.cpp -@@ -20,131 +20,41 @@ +@@ -20,120 +20,18 @@ #include #include -#include -+#include -+#include - #include +-#include ++#include ++#include #include "OpenGLDriverFactory.h" @@ -190,9 +211,7 @@ index b5cb484..4253f7c 100644 - g_x11.closeDisplay = (X11_CLOSE_DISPLAY)dlsym(g_x11.library, "XCloseDisplay"); - return true; -} -+#define RESOLVE_GLX_ENTRYPOINT(Function, Type) \ -+ Function = (Type)glXGetProcAddress((const GLubyte*)#Function); - +- namespace filament { using namespace backend; @@ -205,18 +224,7 @@ index b5cb484..4253f7c 100644 if (mGLXDisplay == nullptr) { utils::slog.e << "Failed to open X display. (exiting)." << utils::io::endl; exit(1); - } -+ /* Manually resolve glX entrypoints we need to create a context */ -+ RESOLVE_GLX_ENTRYPOINT(glXCreateContextAttribsARB, PFNGLXCREATECONTEXTATTRIBSARBPROC); -+ RESOLVE_GLX_ENTRYPOINT(glXCreatePbuffer, PFNGLXCREATEPBUFFERPROC); -+ RESOLVE_GLX_ENTRYPOINT(glXMakeContextCurrent, PFNGLXMAKECONTEXTCURRENTPROC); -+ RESOLVE_GLX_ENTRYPOINT(glXChooseFBConfig, PFNGLXCHOOSEFBCONFIGPROC); -+ RESOLVE_GLX_ENTRYPOINT(glXQueryContext, PFNGLXQUERYCONTEXTPROC); -+ RESOLVE_GLX_ENTRYPOINT(glXGetFBConfigs, PFNGLXGETFBCONFIGSPROC); -+ RESOLVE_GLX_ENTRYPOINT(glXGetFBConfigAttrib, PFNGLXGETFBCONFIGATTRIBPROC); - - if (sharedGLContext != nullptr) { - int r = -1; +@@ -144,7 +42,7 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { int usedFbId = -1; GLXContext sharedCtx = (GLXContext)((void*)sharedGLContext); @@ -225,7 +233,7 @@ index b5cb484..4253f7c 100644 if (r != 0) { utils::slog.e << "Failed to get GLX_FBCONFIG_ID from shared GL context." << utils::io::endl; -@@ -152,7 +62,7 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { +@@ -152,7 +50,7 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { } int numConfigs = 0; @@ -234,7 +242,7 @@ index b5cb484..4253f7c 100644 if (fbConfigs == nullptr) { utils::slog.e << "Failed to get the available GLXFBConfigs." << utils::io::endl; -@@ -163,7 +73,7 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { +@@ -163,7 +61,7 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { int fbIndex = -1; for (int i = 0; i < numConfigs; ++i) { @@ -243,7 +251,7 @@ index b5cb484..4253f7c 100644 if (r != 0) { utils::slog.e << "Failed to get GLX_FBCONFIG_ID for entry " << i << "." << utils::io::endl; -@@ -190,31 +100,21 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { +@@ -190,31 +88,21 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { GLX_DEPTH_SIZE, 24, None }; @@ -277,7 +285,7 @@ index b5cb484..4253f7c 100644 (GLXContext)sharedGLContext, True, contextAttribs); int pbufferAttribs[] = { -@@ -223,21 +123,26 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { +@@ -223,21 +111,18 @@ Driver* PlatformGLX::createDriver(void* const sharedGLContext) noexcept { GL_NONE }; @@ -285,14 +293,6 @@ index b5cb484..4253f7c 100644 - g_glx.setCurrentContext(mGLXDisplay, mDummySurface, mDummySurface, mGLXContext); + mDummySurface = glXCreatePbuffer(mGLXDisplay, mGLXConfig[0], pbufferAttribs); + glXMakeContextCurrent(mGLXDisplay, mDummySurface, mDummySurface, mGLXContext); -+ -+ GLenum result; -+ /* Properly initialize the remainder of the GL entrypoints */ -+ if ((result = glewInit()) != GLEW_OK) -+ { -+ utils::slog.e << "Failed to initialize GLEW. (" << result << ", exiting)." << utils::io::endl; -+ exit(1); -+ } - int result = bluegl::bind(); - ASSERT_POSTCONDITION(!result, "Unable to load OpenGL entry points."); @@ -313,7 +313,7 @@ index b5cb484..4253f7c 100644 } Platform::SwapChain* PlatformGLX::createSwapChain(void* nativeWindow, uint64_t& flags) noexcept { -@@ -255,7 +160,7 @@ Platform::SwapChain* PlatformGLX::createSwapChain( +@@ -255,7 +140,7 @@ Platform::SwapChain* PlatformGLX::createSwapChain( GLX_PBUFFER_HEIGHT, int(height), GL_NONE }; @@ -322,7 +322,7 @@ index b5cb484..4253f7c 100644 if (sur) { mPBuffers.push_back(sur); } -@@ -265,19 +170,19 @@ Platform::SwapChain* PlatformGLX::createSwapChain( +@@ -265,19 +150,19 @@ Platform::SwapChain* PlatformGLX::createSwapChain( void PlatformGLX::destroySwapChain(Platform::SwapChain* swapChain) noexcept { auto it = std::find(mPBuffers.begin(), mPBuffers.end(), (GLXPbuffer)swapChain); if (it != mPBuffers.end()) { @@ -346,33 +346,30 @@ index b5cb484..4253f7c 100644 // TODO Implement GLX fences diff --git a/filament/backend/src/opengl/PlatformGLX.h b/filament/backend/src/opengl/PlatformGLX.h -index 45c3abf..e867c4c 100644 +index 45c3abf..8cebb0e 100644 --- a/filament/backend/src/opengl/PlatformGLX.h +++ b/filament/backend/src/opengl/PlatformGLX.h -@@ -19,8 +19,10 @@ +@@ -19,8 +19,8 @@ #include -#include -#include -+#include -+#include -+#include -+#include ++#include ++#include #include diff --git a/filament/backend/src/opengl/gl_headers.h b/filament/backend/src/opengl/gl_headers.h -index 32ca122..cdbf6fc 100644 +index 32ca122..a734a09 100644 --- a/filament/backend/src/opengl/gl_headers.h +++ b/filament/backend/src/opengl/gl_headers.h -@@ -103,7 +103,8 @@ +@@ -103,7 +103,7 @@ #endif #else - #include -+ #include -+ #include ++ #include #endif // This is just to simplify the implementation (i.e. so we don't have to have #ifdefs everywhere) diff --git a/debian/patches/series b/debian/patches/series index 9508bb6..95abe86 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -8,7 +8,7 @@ 0008-Migrate-to-astc-encoder-API-from-Debian-package.patch 0009-Fix-library-export-for-Debian.patch 0010-Rename-resgen-executable-to-avoid-conflict-with-mono.patch -0011-Replace-BlueGL-with-GLEW.patch +0011-Replace-BlueGL-with-epoxy.patch 0012-Use-system-spirv-cross.patch 0013-Define-M_PIf-only-if-it-is-not-already-defined-in-ma.patch 0014-Avoid-mips-as-identifier-because-it-fails-on-mips-ar.patch -- 2.30.2